//
// Created by 33145 on 2023/6/7.
//

#ifndef ROCKET_ABSTRACT_CODER_H
#define ROCKET_ABSTRACT_CODER_H

#include "../tcp/tcp_buffer.h"
#include "abstract_protocol.h"

namespace rocket {

  class AbstractCoder {
  public:
    typedef std::shared_ptr<AbstractCoder> ptr;

    virtual ~AbstractCoder() = default;

    // 将 message 对象转化为字节流，写入到 buffer
    virtual void encode(std::vector<AbstractProtocol::ptr>& messages, TCPBuffer::ptr out_buffer) = 0;

    // 将 buffer 里面的字节流转换为 message 对象
    virtual void decode(std::vector<AbstractProtocol::ptr>& out_messages, TCPBuffer::ptr buffer) = 0;
  };

}

#endif //ROCKET_ABSTRACT_CODER_H
